Skip to content

Document supplementary files, archive 0.2, per-file lockfiles, first-class README, and adapter API 0.1 migration - #460

Merged
eXamadeus merged 2 commits into
mainfrom
julian/07-23-document_supplementary_files_archive_0.2_per-file_lockfiles_asset-name_constraints_and_adapter_api_0.1_migration
Jul 24, 2026
Merged

Document supplementary files, archive 0.2, per-file lockfiles, first-class README, and adapter API 0.1 migration#460
eXamadeus merged 2 commits into
mainfrom
julian/07-23-document_supplementary_files_archive_0.2_per-file_lockfiles_asset-name_constraints_and_adapter_api_0.1_migration

Conversation

@eXamadeus

@eXamadeus eXamadeus commented Jul 24, 2026

Copy link
Copy Markdown
Member

Why

Facets previously shipped only their declared assets. This documents the new ability for facets to declare and ship non-asset files — skill companion files that install and remove atomically with their skill, and top-level archive-only files like README.md and LICENSE that travel inside the archive but are never written to disk at install time.

Details

The documentation updates cover several interconnected breaking changes shipping together:

Supplementary files. The manifest's top-level files array declares archive-only files (README.md, LICENSE, etc.). A skill descriptor's own files array declares companion files (references, scripts, templates) that materialize atomically with the skill. Both are declared as exact paths — no globs. Top-level paths cannot resolve under skills/, and a skill's companions cannot list SKILL.md itself.

Archive 0.2 and lockfile 0.2. Every build now emits facetVersion: 0.2 with a complete per-entry files hash map covering every archive entry. The lockfile moves to 0.2 with a per-file { path, integrity } record inside each asset entry. Consumers accept legacy 0.1 archives and legacy alpha lockfiles during the compatibility window; versions are dispatched by exact match, never numeric ordering.

Asset naming. Asset names are now single-segment — slash-namespaced names like viper-plans/planning are no longer valid in new manifests. Skills and commands share one namespace and cannot reuse a name. Companion file paths may contain / for directory depth, but that is path depth, not part of the asset name.

No front matter in primary files. A SKILL.md, agent, or command file carrying YAML front matter is now a build error. Asset metadata lives exclusively in the manifest.

Adapter API 0.00.1. The adapter contract advances to a tagged multi-file request/result shape. A 0.1 CLI treats a 0.0 adapter as unsupported and fails before any write.

First-class README authoring. facet create writes and declares an editable README.md by default (skip with --no-readme). facet edit gains a dedicated README panel for creating, adopting, editing, or removing both README.md and the extensionless README.

Rollout order. The change ships consumer-first: protocol package publishes dual 0.1/0.2 verification, then the registry adopts it, then adapter SDK and first-party adapters publish 0.1, then the CLI release turns on 0.2 production.

The three version axes — adapter API, archive facetVersion, and lockfile version — are independent and classified separately. A 0.0 adapter fails on the adapter axis before a facet's facetVersion is even examined.

Verification

Documentation tasks 14 and 15 are marked complete in the task tracker. Compatibility and release-order claims were verified against authoritative schemas, constants, package metadata, and staged Changesets.


Note

Medium Risk
Mostly documentation and small CLI validation, but the release bundles breaking contract changes (0.2 formats, naming, adapter 0.1) and the front-matter story is inconsistent across pages in the same PR, which could mislead authors until reconciled.

Overview
This PR documents and tightens the non-asset-files release: facets can declare top-level archive-only files and per-skill companions, builds/installs use archive and lockfile 0.2 (per-entry hashes, per-file lock records, atomic skill bundles), and adapter API 0.1 is called out as a separate compatibility axis from archive/lockfile versions.

Documentation updates span the root README, a large 2026-07-23 changelog entry, specification pages (archive, build, manifest, lockfile, commit, install, integrity, publish, terminology), and authoring/install guides (create/edit with default README.md and --no-readme, troubleshooting for unsupported archives and per-file drift). OpenSpec design and authoring deltas move primary-asset YAML front matter from “strip/reject at build” toward preserve in the archive and reconcile from the manifest at install; note that some user-facing spec/changelog lines in the same diff still describe front matter as a build error, so reviewers may want those aligned.

CLI behavior in this diff: create/edit wizards share validateAssetNameInWizard, enforcing single-segment names and skills/commands sharing one namespace (agents stay separate). archiveCompatibilityGuidance maps unsupported format 0.2 to minimum CLI 0.31.0.

Engine/protocol touch-ups: regenerated registry OpenAPI client (contents responses expose a files list instead of resources), a runInstall test for RECONCILE_OWNED_PATH_SET when the lockfile lists owned paths the plan does not, and lockfile schema tests for agent/command primary paths. OpenSpec tasks 14–15 and part of 16 are marked complete; registry/adapter publish verification items remain blocked.

Reviewed by Cursor Bugbot for commit 144bb0e. Bugbot is set up for automated code reviews on this repo. Configure here.

@changeset-bot

changeset-bot Bot commented Jul 24, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 144bb0e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@eXamadeus, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 51 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 67b25acb-7680-4a0c-8c11-35f90f543534

📥 Commits

Reviewing files that changed from the base of the PR and between 896fc1d and 144bb0e.

⛔ Files ignored due to path filters (1)
  • packages/engine/src/registry/generated/registry-api.ts is excluded by !**/generated/**
📒 Files selected for processing (32)
  • README.md
  • docs/changelog/index.mdx
  • docs/cli/authoring/build.mdx
  • docs/cli/authoring/create.mdx
  • docs/cli/authoring/edit.mdx
  • docs/cli/authoring/modify.mdx
  • docs/docs/learn/skills.mdx
  • docs/guides/create-your-first-facet.mdx
  • docs/guides/install-facets.mdx
  • docs/guides/troubleshooting.mdx
  • docs/snippets/asset-descriptor.mdx
  • docs/specification/archive.mdx
  • docs/specification/build.mdx
  • docs/specification/commit.mdx
  • docs/specification/install.mdx
  • docs/specification/integrity.mdx
  • docs/specification/lockfile.mdx
  • docs/specification/manifest.mdx
  • docs/specification/publish.mdx
  • docs/specification/terminology.mdx
  • openspec/changes/support-non-asset-files/design.md
  • openspec/changes/support-non-asset-files/specs/authoring__facets/spec.md
  • openspec/changes/support-non-asset-files/tasks.md
  • packages/cli/src/tui/views/__tests__/validate-asset-name.test.ts
  • packages/cli/src/tui/views/create/create-view.tsx
  • packages/cli/src/tui/views/edit/edit-view.tsx
  • packages/cli/src/tui/views/validate-asset-name.ts
  • packages/cli/src/util/__tests__/archive-compatibility.test.ts
  • packages/cli/src/util/archive-compatibility.ts
  • packages/engine/src/__tests__/run-install.test.ts
  • packages/engine/src/registry/openapi.snapshot.yaml
  • packages/protocol/src/__tests__/lockfile-versions.test.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch julian/07-23-document_supplementary_files_archive_0.2_per-file_lockfiles_asset-name_constraints_and_adapter_api_0.1_migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

eXamadeus commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c91bf4f5d7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/changelog/index.mdx
Comment on lines +8 to +10
<Update label="2026-07-23" description="Facets ship non-asset files; archive 0.2, per-file lockfiles, first-class README, and the 0.1 adapter contract" tags={["CLI", "Breaking", "New Feature"]} rss={{
title: "Supplementary files, archive 0.2, and first-class README authoring",
description: "Facets can now declare and ship non-asset files: skill companion files (references, scripts, templates beside SKILL.md) that install and remove atomically with their skill, and top-level archive-only files like README.md and LICENSE that ship in the archive but never materialize on disk. Declare them with exact paths in the manifest's top-level files array or a skill descriptor's files array. Builds emit the new 0.2 archive format with a complete per-entry hash map; lockfiles move to 0.2 with a per-file integrity record for every materialized file; install reports and repairs drift per file. facet create now writes and declares an editable README.md by default (skip with --no-readme), and facet edit has a dedicated README panel. Consumers still accept legacy 0.1 archives and legacy alpha lockfiles during the compatibility window; the two versions are dispatched by exact match. Asset names are single-segment Agent Skills names -- slash-namespaced names are no longer valid in new manifests -- and skills and commands now share one namespace. The adapter contract advances from positional 0.0 to the tagged 0.1 request/result shape: rebuild and reinstall any adapter that still declares 0.0. Rollout is consumer-first: protocol, then registry, then adapters, then the CLI."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Delay the changelog entry until the CLI release ships

This publishes a July 23 “now” release announcement even though the same change leaves the held CLI release gate unfinished and adds no agent-facets changeset. Users of the released CLI will follow the documented --no-readme, archive 0.2, and adapter 0.1 migration paths before a CLI package exposing them exists. Keep this information in unreleased documentation, or add the <Update> with the final CLI release.

AGENTS.md reference: docs/changelog/AGENTS.md:L91-L109

Useful? React with 👍 / 👎.

- **Command** — `commands/<name>.md`. A single markdown file whose content is the command's prompt.

YAML front matter in an asset file is optional. When present it MUST be preserved verbatim through the [build](/specification/build#steps); the manifest's `name`, `description`, and any per-adapter extras are merged on top of the author's front matter at install time.
A primary asset file (a `SKILL.md`, agent, or command file) MUST NOT contain YAML front matter — the manifest is the single source of asset metadata. Authoring tools strip front matter before writing, and [`facet build`](/specification/build#steps) rejects a primary file that still carries it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the supported primary-file front-matter contract

This new normative rule is the opposite of the implementation: validateContentFiles only rejects empty prompts, and runBuildPipeline explicitly permits author front matter before preserving it for install-time metadata merging. Existing facets with YAML headers therefore still build and install correctly, while these docs instruct their authors to remove valid content and adapter metadata. Restore the allowed-front-matter documentation, or land the corresponding enforcement before documenting this as a breaking change.

Useful? React with 👍 / 👎.

@greptile-apps

greptile-apps Bot commented Jul 24, 2026

Copy link
Copy Markdown

Greptile Summary

This PR documents the non-asset files platform for Facets — skill companion files, top-level archive-only files (README.md, LICENSE), archive format 0.2 with a complete per-entry hash map, lockfile 0.2 with per-file { path, integrity } records, and the adapter API 0.00.1 migration. Several small code changes accompany the docs: shared validateAssetNameInWizard for skill/command namespace enforcement in both create and edit wizards, archiveCompatibilityGuidance table updated to 0.31.0, registry OpenAPI snapshot regenerated, and a new RECONCILE_OWNED_PATH_SET install test.

  • Front-matter rule conflict: The user-facing documentation (changelog, build spec, manifest spec, authoring guides) consistently says primary asset front matter is a build error, while the OpenSpec files updated in the same PR now say front matter is permitted, archived verbatim, and reconciled with the manifest at install time. One source needs to be aligned with actual implementation behavior before this lands.
  • Code changes are clean: validateAssetNameInWizard correctly enforces single-segment name grammar, intra-type uniqueness, and the shared skill/command namespace; the 0.31.0 minimum-release update and the new install reconciliation test both look correct and well-tested.

Confidence Score: 4/5

Safe to merge once the front-matter contradiction between user-facing docs and the OpenSpec is resolved — the code changes are sound, but the conflicting behavioral claims could mislead authors who read either source during rollout.

The changelog, build specification, manifest spec, and authoring guides all state that a primary asset file carrying YAML front matter is a build error, while the OpenSpec design and spec updated in this same PR say front matter is archived verbatim and merged at install. These are directly contradictory behavioral claims in the same PR, and at least one will be wrong for any given CLI build. The code changes (shared wizard validator, archive-compatibility table, install test) are solid and carry no defects.

The contradiction spans docs/specification/build.mdx (build error claim) and openspec/changes/support-non-asset-files/specs/authoring__facets/spec.md (front matter permitted claim). Also docs/changelog/index.mdx, docs/specification/manifest.mdx, docs/guides/create-your-first-facet.mdx, and docs/cli/authoring/edit.mdx all repeat the build-error claim and would need updating if the OpenSpec version is correct.

Reviews (5): Last reviewed commit: "Reconcile front-matter specs, add wizard..." | Re-trigger Greptile

@eXamadeus
eXamadeus force-pushed the julian/07-23-add_independent_tagged_readme_actions_panel_view_and_editor_round-trip_integration_for_both_conventional_paths branch from a738ae8 to d2de027 Compare July 24, 2026 04:03
@eXamadeus
eXamadeus force-pushed the julian/07-23-document_supplementary_files_archive_0.2_per-file_lockfiles_asset-name_constraints_and_adapter_api_0.1_migration branch 2 times, most recently from 7c8b3c1 to b48fb4b Compare July 24, 2026 04:32

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b48fb4b4ea

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +51 to +52
<ResponseField name="--no-readme" type="boolean">
Skip the default `README.md`. `facet create` writes and declares an editable `README.md` (seeded from the name and description) by default; pass `--no-readme` to scaffold without it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make --no-readme trigger headless scaffolding

When users run facet create --no-readme without another content flag, this documentation promises that the README will be skipped, but decideCreate deliberately leaves readme out of HEADLESS_FLAGS and its test confirms that this invocation opens the default README-enabled wizard instead. Either include --no-readme in the headless trigger set or document that it only takes effect alongside headless content flags.

Useful? React with 👍 / 👎.

eXamadeus commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

Merge activity

  • Jul 24, 4:47 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jul 24, 5:01 AM UTC: Graphite rebased this pull request as part of a merge.
  • Jul 24, 5:01 AM UTC: @eXamadeus merged this pull request with Graphite.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a2958c5. Configure here.

Comment thread packages/cli/src/util/archive-compatibility.ts
const sibling = type === 'skill' ? 'command' : type === 'command' ? 'skill' : undefined
if (sibling && assets[sibling].items.some((item) => item === value)) {
return `"${value}" is already used by a ${sibling} (skills and commands share one namespace)`
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Headless create skips namespace check

Medium Severity

This commit adds shared skill/command namespace validation to the create and edit wizards via validateAssetNameInWizard, but headless facet create still only runs validateAssetNameSegment per type, so the same colliding --skill and --command names can scaffold successfully and fail later at build.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a2958c5. Configure here.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a2958c5e93

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +87 to +89
<Note>
`facet modify` operates on asset primaries. To adopt, move, or reconcile a skill's [companion files](/specification/manifest#supplementary-files) or top-level supplementary files, use [`facet edit`](/cli/authoring/edit).
</Note>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not direct companion moves to facet edit

For a skill that has declared companions, facet edit cannot move those files during a rename: its edit session treats the renamed skill as a new scaffold plus deletion of the old skill and its declared companions (use-edit-session.ts builds those operations), and reconciliation only offers add/ignore or scaffold/remove actions. Thus the newly documented instruction sends users to a flow that cannot preserve or relocate companion content; document a safe manual move sequence or implement companion-aware renaming before recommending this command.

Useful? React with 👍 / 👎.

@eXamadeus
eXamadeus changed the base branch from julian/07-23-add_independent_tagged_readme_actions_panel_view_and_editor_round-trip_integration_for_both_conventional_paths to graphite-base/460 July 24, 2026 04:58
@eXamadeus
eXamadeus changed the base branch from graphite-base/460 to main July 24, 2026 04:59
…t-name constraints, and adapter API `0.1` migration
…ose scenario-coverage test gaps (16.4)

Scenario-by-scenario verification of the support-non-asset-files delta specs
surfaced findings, resolved here:

- Front-matter delta relaxation: the authoring specs required build to reject
  primary-asset front matter and edit to parse/strip it, but the implemented
  (and pre-existing) contract permits author front matter, archives it
  verbatim, and reconciles manifest-owned metadata over it at install time.
  Relaxed the build, 'manifest is source of truth for metadata', and edit
  requirements to match the implementation, and corrected the design.md
  drift-checking rationale.

- Wizard shared-namespace validation: create and edit wizards validated
  within-type duplicates but not the skill/command shared namespace. Extracted
  a shared validateAssetNameInWizard helper, wired both views to it, and added
  unit coverage.

- Missing-arm tests: added a RECONCILE_OWNED_PATH_SET run-install test and a
  single-file command lockfile-entry test.

- Archive-format compatibility mapping: MINIMUM_RELEASE_FOR_FORMAT['0.2'] set
  to the projected activation release 0.31.0, with its test updated.

The held agent-facets CLI activation Changeset is intentionally NOT here; it
lives in a separate held draft PR stacked on top.
@eXamadeus
eXamadeus force-pushed the julian/07-23-document_supplementary_files_archive_0.2_per-file_lockfiles_asset-name_constraints_and_adapter_api_0.1_migration branch from a2958c5 to 144bb0e Compare July 24, 2026 05:00
@mintlify

mintlify Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
AgentFacets 🟢 Ready View Preview Jul 24, 2026, 5:01 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@eXamadeus
eXamadeus merged commit 36639b0 into main Jul 24, 2026
9 checks passed
@eXamadeus
eXamadeus deleted the julian/07-23-document_supplementary_files_archive_0.2_per-file_lockfiles_asset-name_constraints_and_adapter_api_0.1_migration branch July 24, 2026 05:01

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 144bb0ed00

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


<ResponseField name="--skill / --agent / --command" type="repeatable">
An asset to scaffold. Repeat per asset; at least one is required in headless mode. Asset names must be kebab-case.
An asset to scaffold. Repeat per asset; at least one is required in headless mode. Asset names are single-segment [Agent Skills names](/specification/manifest#asset-names); a skill and command can't share a name.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject cross-type duplicates in headless create

The documented shared namespace is enforced only by the interactive wizard. In headless mode, decideCreate validates each flag group independently and passes both arrays to writeScaffold, so facet create --name demo --skill review --command review succeeds but writes a manifest the current schema rejects; the user's immediately scaffolded project then cannot build. Add a cross-check before returning the headless options (or avoid promising this constraint for headless creation).

Useful? React with 👍 / 👎.

Comment on lines 11 to 13

1. **Parse and validate the manifest.** Read the facet manifest (`facet.json`) and validate it against the [manifest schema](/specification/manifest). Invalid manifests MUST be rejected with a descriptive error. The manifest's `name` MUST be a valid facet identity; the `version` MUST be a semver string; at least one text asset MUST be declared.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Front-matter rule contradicts the OpenSpec

The user-facing docs in this PR consistently say primary asset front matter is a build error: this file (step 2), docs/specification/manifest.mdx ("rejects a primary file that still carries it"), docs/changelog/index.mdx ("is now a build error"), and docs/guides/create-your-first-facet.mdx ("MUST NOT carry YAML front matter"). However, both internal spec files updated in the same PR say the opposite. openspec/changes/support-non-asset-files/specs/authoring__facets/spec.md now reads: "Author-supplied YAML front matter in a primary asset file SHALL be permitted: build SHALL preserve it verbatim in the archive, and materialization SHALL reconcile it with the manifest by merging manifest-owned metadata on top of any author front matter." openspec/changes/support-non-asset-files/design.md likewise says "Author-supplied front matter in a primary asset is archived verbatim."

One of these two authoritative sources is wrong. If the implementation rejects front matter at build, the OpenSpec misleads contributors; if it preserves and merges it, the user-facing docs and changelog tell authors to expect a build error they'll never see. The PR description's own Cursor summary note flags this: "OpenSpec authoring deltas now say primary front matter is archived verbatim and reconciled at install (while much of the new user-facing changelog still describes front matter as a build error—worth aligning)." This should be resolved before merging so that docs and spec agree on the actual runtime behavior.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant